iT邦幫忙

2022 iThome 鐵人賽

DAY 3
1

Hello Moleculer

今天要開始實際動手試試 Moleculer ,首先從手動建立簡單的服務開始,再透過 CLI 工具建立一個基本的範例。

最簡單的微服務

要使用基本的 moleculer 框架,可以透過 npm 安裝:

npm install moleculer --save

以下是官方提供的基本範例,用來計算兩數相加的結果,程式碼主要分為三個部分:

  • 建立 Broker 物件
  • 定義服務內容
  • 啟動 Broker 服務

math.service.js

const { ServiceBroker } = require("moleculer");

// 建立一個 ServiceBroker
const broker = new ServiceBroker();

// 定義服務
broker.createService({
    name: "math",
    actions: {
        add(ctx) {
            return Number(ctx.params.a) + Number(ctx.params.b);
        }
    }
});

// 啟動 broker
broker.start()
    // 呼叫服務
    .then(() => broker.call("math.add", { a: 5, b: 3 }))
    // 列出響應
    .then(res => console.log("5 + 3 =", res))
    .catch(err => console.error(`Error occured! ${err.message}`));

執行後你會看到一些 Broker 執行及啟動的訊息,其中也會印出以下的結果:

5 + 3 = 8

使用 CLI

Moleculer 也提供官方 CLI 工具,可快速建立微服務專案,預設範例包含 API 閘道器,可以透過 REST API 進行呼叫。

npm i moleculer-cli -g
moleculer init project moleculer-demo

執行 CLI 程式的過程中,會請您根據需求輸入一些設定,如以下結果所示:

❯ moleculer init project moleculer-demo
Template repo: moleculerjs/moleculer-template-project
Downloading template...
? Add API Gateway (moleculer-web) service? Yes
? Would you like to communicate with other nodes? Yes
? Select a transporter NATS (recommended)
? Would you like to use cache? No
? Add DB sample service? Yes
? Would you like to enable metrics? Yes
? Would you like to enable tracing? Yes
? Add Docker & Kubernetes sample files? Yes
? Use ESLint to lint your code? Yes
Create 'moleculer-demo' folder...
? Would you like to run 'npm install'? Yes

建立完成後,鍵入以下指令並執行,即可在 Port 3000 啟動微服務:

npm run dev

欲測試是否正常執行,可以打開瀏覽器鍵入以下網址,即可看到歡迎頁面如下圖:

http://localhost:3000/


Fig. 1. Moleculer 歡迎頁面

參考文獻

[1] Usage, https://moleculer.services/docs/0.14/usage.html

家家酒小劇場

  • Otter - 為什麼成熟的框架都要出自己的 CLI 工具呢?
  • Boxy - 因為 CLI 工具可以幫助我們快速的建立開發環境,能夠讓我們根據需求客製化與產品相近的架構,而且範例程式還可以提供新手基礎參考架構唷。
  • Otter - 原來是這樣,那 CLI 工具還真是相當的方便呢。

上一篇
Day 2 : Moleculer 微服務框架
下一篇
Day 4 : 核心概念
系列文
Moleculer 家家酒31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言